package com.sdb.patients.service.impl;

import java.time.LocalDate;
import java.util.List;
import java.util.Random;

import com.sdb.common.utils.DateUtils;
import com.sdb.prescription.domain.TdPrescription;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sdb.patients.mapper.TdPatientsMapper;
import com.sdb.patients.domain.TdPatients;
import com.sdb.patients.service.ITdPatientsService;

/**
 * 病人信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-12-26
 */
@Service
public class TdPatientsServiceImpl implements ITdPatientsService 
{
    @Autowired
    private TdPatientsMapper tdPatientsMapper;

    /**
     * 查询病人信息
     * 
     * @param patientsId 病人信息主键
     * @return 病人信息
     */
    @Override
    public TdPatients selectTdPatientsByPatientsId(String patientsId)
    {
        return tdPatientsMapper.selectTdPatientsByPatientsId(patientsId);
    }

    /**
     * 查询病人信息列表
     * 
     * @param tdPatients 病人信息
     * @return 病人信息
     */
    @Override
    public List<TdPatients> selectTdPatientsList(TdPatients tdPatients)
    {
        return tdPatientsMapper.selectTdPatientsList(tdPatients);
    }


    /**
     * 生成 8 位数随机id
     */
    private static final int CARD_ID_LENGTH = 9;
    private static final String PREFIX = "P"; // 可选：添加前缀以标识类型
    private Random random = new Random();

    /**
     * 新增病人信息
     * 
     * @param tdPatients 病人信息
     * @return 结果
     */
    @Override
    public int insertTdPatients(TdPatients tdPatients)
    {
        //检查证件号是否已注册
        if (isNumberExists(tdPatients.getNumber())) {
            return 0; // 表示证件号已存在
        }
        generateUniqueCardId(tdPatients);
        return tdPatientsMapper.insertTdPatients(tdPatients);
    }

    private boolean isNumberExists(String number) {
        return tdPatientsMapper.selectByNumber(number) != null;
    }

    private synchronized void generateUniqueCardId(TdPatients tdPatients) {
        String cardId;
        do {
            cardId = PREFIX + generateRandomCardId();
        } while (isCardIdExists(cardId));

        tdPatients.setCardId(cardId);
    }
    private String generateRandomCardId() {
        long num = Math.abs(random.nextLong()) % 100000000L; // 生成一个8位的随机数
        return String.format("%08d", num); // 确保有前导零
    }

    private boolean isCardIdExists(String cardId) {
        // 假设有一个方法可以根据cardId查找记录
        return tdPatientsMapper.selectByCardId(cardId) != null;
    }


    /**
     * 修改病人信息
     * 
     * @param tdPatients 病人信息
     * @return 结果
     */
    @Override
    public int updateTdPatients(TdPatients tdPatients)
    {
        return tdPatientsMapper.updateTdPatients(tdPatients);
    }

    /**
     * 批量删除病人信息
     * 
     * @param patientsIds 需要删除的病人信息主键
     * @return 结果
     */
    @Override
    public int deleteTdPatientsByPatientsIds(String[] patientsIds)
    {
        return tdPatientsMapper.deleteTdPatientsByPatientsIds(patientsIds);
    }

    /**
     * 删除病人信息信息
     * 
     * @param patientsId 病人信息主键
     * @return 结果
     */
    @Override
    public int deleteTdPatientsByPatientsId(String patientsId)
    {
        return tdPatientsMapper.deleteTdPatientsByPatientsId(patientsId);
    }

    @Override
    public TdPatients selectTdPatientsByCard(String cardId) {
        return tdPatientsMapper.selectBycard(cardId);
    }

    @Override
    public int payByCard(TdPrescription tdPrescription) {
        return tdPatientsMapper.payByCard(tdPrescription);
    }
}
